/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.ItemPedido;

/**
 *
 * @author Alex
 */
public class ItemPedidoDAO {

    public boolean criar(ItemPedido itemPedido) {
        try {
            Connection conexao = ConectaBanco.getConexao();
            System.out.println("dao");
            String sql = "insert into item_pedido(id_pedido,id_produto,quantidade,status) values ((select max(id) from pedido),?,?,1)";
            // seta os parametros no sql
            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setInt(1, itemPedido.getProduto().getId());
            pstmt.setInt(2, itemPedido.getQuantidade());

            pstmt.execute();

            conexao.close();
            return true;

        } catch (SQLException sql) {

            return false;

        }
    }

    public ArrayList<ItemPedido> buscarTodas() throws ClassNotFoundException {
        ArrayList<ItemPedido> itemPedidos = new ArrayList<ItemPedido>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from item_pedido where status = 1";

            PreparedStatement pst = conexao.prepareStatement(sql);

            ResultSet rs = pst.executeQuery();
            PedidoDAO pedidoDAO = new PedidoDAO();
            ProdutoDAO produtoDAO = new ProdutoDAO();

            while (rs.next()) {
                ItemPedido itemPedido = new ItemPedido();
                itemPedido.setPedido(pedidoDAO.buscarLoginByCodigo(rs.getInt("id_pedido")));
                itemPedido.setProduto(produtoDAO.buscarLoginByCodigo(rs.getInt("id_produto")));
                itemPedido.setQuantidade(rs.getInt("quantidade"));
                itemPedidos.add(itemPedido);
            }
            conexao.close();
            return itemPedidos;

        } catch (SQLException sql) {
            return null;
        }

    }
    
       public ArrayList<ItemPedido> buscarPorData(Date data_inicial, Date data_final) throws 
ClassNotFoundException {
        ArrayList<ItemPedido> itens_pedidos = new ArrayList<ItemPedido>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select  i.quantidade, p.id as id_pedido, prod.id as id_produto from produto as prod, pedido as p, item_pedido as i where  p.data_compra between ? and ? and p.id = i.id_pedido and prod.id = i.id_produto and  p.status=1";


            PreparedStatement pst = conexao.prepareStatement(sql);
           
            
            pst.setDate(1, data_inicial);
            pst.setDate(2, data_final);
            ResultSet rs = pst.executeQuery();
            
            PedidoDAO pedidoDAO = new PedidoDAO();
            ProdutoDAO produtoDAO = new ProdutoDAO();
            
                    



            while (rs.next()) {
                ItemPedido item_pedido = new ItemPedido();
                
                
                
                item_pedido.setPedido(pedidoDAO.buscarLoginByCodigo(rs.getInt("id_pedido")));
                System.out.println(item_pedido.getPedido().getMatricula().getAluno().getNome
());
                item_pedido.setProduto(produtoDAO.buscarLoginByCodigo(rs.getInt
("id_produto")));
                item_pedido.setQuantidade(rs.getInt("quantidade"));
                System.out.println(item_pedido.getProduto().getNome());
                System.out.println(rs.getInt("quantidade"));
                
                
                
                itens_pedidos.add(item_pedido);
            }
            conexao.close();
            return itens_pedidos;

        } catch (Exception sql) {
            System.out.println("Erro ao buscar por data"+ sql.getMessage());
            return null;
        }

    }

    public ItemPedido buscarLoginByCodigo(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from item_pedido where id=? and status =1 ");
        sql.setInt(1, codigo);
        ResultSet rs = sql.executeQuery();
        PedidoDAO pedidoDAO = new PedidoDAO();
        ProdutoDAO produtoDAO = new ProdutoDAO();
        ItemPedido itemPedido = new ItemPedido();
        while (rs.next()) {
            

            itemPedido.setProduto(produtoDAO.buscarLoginByCodigo(rs.getInt("id_produto")));
            itemPedido.setQuantidade(rs.getInt("quantidade"));

        }
        conexao.close();
        return itemPedido;
    }

    public boolean atualizar(ItemPedido itemPedido) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update item_pedido set id_pedido=(select max(id) from pedido), id_produto=?, quantidade=? where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            
           
            pstmt.setInt(1, itemPedido.getProduto().getId());
            pstmt.setInt(2, itemPedido.getQuantidade());
            

            System.out.println(sql);
            pstmt.execute();
            System.out.println("Dados modificados com sucesso");
            conexao.close();
            return true;
        } catch (SQLException sql) {
            System.out.println("Erro ao atualizar registro");

            return false;

        }
    }

    public boolean marcarInativo(int id) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update item_pedido set status=0 where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1, id);

            pstmt.execute();

            conexao.close();
            return true;
        } catch (SQLException sql) {

            return false;

        }
    }
}
